package com.neusoft.service.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import com.neusoft.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.neusoft.po.Cart;
import com.neusoft.po.DailyTotal;
import com.neusoft.po.OrderDetailet;
import com.neusoft.po.Orders;
import com.neusoft.service.OrdersService;
import com.neusoft.util.CommonUtil;


@Service
public class OrdersServiceImpl implements OrdersService {

    @Autowired
    private CartMapper cartMapper;

    @Autowired
    private OrdersMapper ordersMapper;

    @Autowired
    private OrderDetailetMapper orderDetailetMapper;

    @Autowired
    private FoodMapper foodMapper;

    @Autowired
    private BusinessMapper businessMapper;

    @Override
    @Transactional
    public int createOrders(Orders orders) {
        //1、查询当前用户购物车中当前商家的所有食品
        Cart cart = new Cart();
        cart.setUserId(orders.getUserId());
        cart.setBusinessId(orders.getBusinessId());
        List<Cart> cartList = cartMapper.listCart(cart);

        //2、创建订单（返回生成的订单编号）
        orders.setOrderDate(CommonUtil.getCurrentDate());
        ordersMapper.saveOrders(orders);
        int orderId = orders.getOrderId();

        //3、批量添加订单明细
        List<OrderDetailet> list = new ArrayList<>();
        for (Cart c : cartList) {
            OrderDetailet od = new OrderDetailet();
            od.setOrderId(orderId);
            od.setFoodId(c.getFoodId());
            od.setQuantity(c.getQuantity());
            od.setFoodName(foodMapper.getNameById(c.getFoodId()));
            od.setFoodPrice(foodMapper.getPriceById(c.getFoodId()));
            od.setDeliveryPrice(businessMapper.getDeliveryPriceById(c.getBusinessId()));
            list.add(od);
        }
        orderDetailetMapper.saveOrderDetailetBatch(list);

        //4、从购物车表中删除相关食品信息
        cartMapper.removeCart(cart);

        return orderId;
    }

    @Override
    public Orders getOrdersById(Integer orderId) {
        return ordersMapper.getOrdersById(orderId);
    }

    @Override
    public List<Orders> listOrdersByUserId(String userId) {
        return ordersMapper.listOrdersByUserId(userId);
    }

    @Override
    public int turnOrderState(Integer orderId) {
        return ordersMapper.turnOrderState(orderId, CommonUtil.getCurrentDate());
    }

    @Override
    public List<Orders> listPaidOrdersByUserId(String userId) {
        return ordersMapper.listPaidOrdersByUserId(userId);
    }

    @Override
    public int updateAddMark(Integer orderId, Integer addMark) {
        return ordersMapper.updateAddMark(orderId, addMark);
    }

    @Override
    public List<DailyTotal> listWeeklyTotalById(String userId) {
        return ordersMapper.listWeeklyTotalById(userId, CommonUtil.getCurrentDate());
    }

    public List<DailyTotal> listMonthlyTotalById(String userId) {
        return ordersMapper.listMonthlyTotalById(userId, CommonUtil.getCurrentDate());
    }
}
